AWS Transit GatewayでAWSから複数のVIFへのルーティングを制御する
複数のVIFからアドバタイズされるルートが0.0.0.0/0で困るな
こんにちは、のんピ(@non____97)です。
皆さんは複数のVIFからアドバタイズされるルートが0.0.0.0/0
で困るなとなったことはありますか? 私はあります。
Direct Connectを介してオンプレミスからAWSへ受け取れるルートの数は100個までです。
Routes per Border Gateway Protocol (BGP) session on a private virtual interface or transit virtual interface : 100 each for IPv4 and IPv6
100以上の経路となる場合は経路集約をして対応をします。しかし、Direct Connectのデリバリーパートナーが提供しているサービスの仕様によっては任意のプレフィックスで集約ができず、0.0.0.0/0
でしか集約できない場合があります。
このように0.0.0.0/0
でアドバタイズしてくるVIFが複数あると、VGWやDirect Connect Gatewayはどちらにルーティングするのか判断が付きません。
そんな時はTransit Gatewayの出番です。
どういう構成を取る必要があるのか以降紹介します。
いきなりまとめ
- 「アドバタイズされたルートとのロンゲストマッチ」以外、AWS側でオンプレミス間とのルーティングを制御する術がない
- VIF毎にDirect Connect Gatewayを分離して、Transit Gatewayに接続することで対応が可能
Direct Connectのルーティングポリシー
本題に入る前にDirect Connectのルーティングポリシーをおさらいします。
「オンプレミスネットワーク から AWS への経路」と「AWS から オンプレミスネットワーク への経路」のルーティングは以下の順で決定します。
- オンプレミスネットワーク から AWS への経路
- アドバタイズされたルートとのロンゲストマッチとなるパス
- Local Preferenceが最も大きいパス
- AS_PATHが最短であるパス
- AWS から オンプレミスネットワーク への経路
- アドバタイズされたルートとのロンゲストマッチとなるパス
- BGPコミュニティタグの優先度が高いパス
- 発信元のリージョンまでの AWS Direct Connect ロケーションの相対距離が短いパス
- AS_PATHが最短であるパス (Direct Connect接続とVPCのリージョンが異なる場合はAS_PATHプリペンドは使用不可)
- MEDの値が小さいパス (MEDで優先制御可能ではあるが、Direct Connectで正式サポートされてはいないため非推奨)
参考
- [AWS Black Belt Online Seminar] AWS Direct Connect P.59 - P.67
- [AWS Black Belt Online Seminar] オンプレミスとAWS間の冗長化接続 P.21, P.24
- Set an Active/Passive Direct Connect connection | AWS re:Post
- BGP コミュニティを使用して Direct Connect のルーティングパスに影響を与える | AWS re:Post
- ルーティングポリシーと BGP コミュニティ - AWS Direct Connect
ここで重要なのが、いずれのパターンも「アドバタイズされたルートとのロンゲストマッチ」以外はAWS側でコントロールする術がないという点です。
そのため、一度VGWもしくはDirect Connect Gatewayにルーティングされると、上述のポリシーに従ってルーティングされます。
そんな時こそTransit Gateway
Transit Gatewayを使う理由
AWS側からは、VGWもしくはDirect Connect Gatewayに関連付けしているどのVIFにルーティングするかを制御できないことを確認しました。
そもそも、どちらのVIFも0.0.0.0/0
をアドバタイズしてきた場合、BGPコミュニティタグやAS_PATHプリペンドを使用したとしても、0.0.0.0/0
に対するActive/Standbyとなり、どちらかのVIFは普段使われないことになります。そうすると、Standby側のVIFに接続している拠点へ通信する際は、Active側のVIFを通るという遠回りな経路になってしまいます。
このような場合は、VIF毎にDirect Connect Gatewayを分離して、片方もしくは両方のDirect Connect GatewayをTransit Gatewayに関連付けを行い、Transit Gateway route tableでDirect Connect Gatewayに静的ルートを定義することで対応が可能です。
Direct Connect Gateway内のルーティングは制御できないので、前段にTransit Gatewayを挟んでコントロールしようという発想です。
ちなみに2023/5/1時点でTransit Gatewayに関連付けできるDirect Connect Gatewayの数は20個です。
Number of Direct Connect gateways associated to a transit gateway : 20
よっぽどのことがない限りDirect Connect Gatewayを1つのTransit Gatewayに20個アタッチすることはないと思いますが、気に留めておきましょう。
注意点 1. Propagationを有効活用できない問題
この構成を取る場合の注意点がいくつかあります。
まず一つ目がDirect Connect GatewayのTransit Gateway attachmentからPropagationを有効活用することができない点です。
どちらのDirect Connect GatewayでもPropagationを有効化すると、今回のケースは0.0.0.0/0
が重複してしまいます。
そのため、Propagationを有効活用することができません。
Propagationではなく静的ルートを設定してあげるとなると、「Direct Connect Gatewayにルーティングしたいプレフィックスが複数ある」 × 「Transit Gateway route tableが複数ある」場合に大変です。
そのような場面は、Direct Connect GatewayにルーティングしたいCIDRをまとめたプレフィックスリストを作成し、Transit Gateway route tableにてプレフィックスリストのリファレンスを作成することで楽ができます。
試しにやってみます。
10.0.0.0/24
と192.168.1.0/24
、172.31.2.0/24
のマネージドプレフィックスリストを用意します。
Transit Gateway route tableを選択してプレフィックスリストのリファレンス
タブからリファレンスを作成
をクリックし、用意したプレフィックスリストとルーティング先のTransit Gateway attachment IDを選択します。
プレフィックスリストのリファレンスを作成
をクリックすると、プレフィックスリストのリファレンス一覧に追加されます。
ルート
タブからルート一覧を確認すると、プレフィックスリストのリファレンスに追加したCIDRとTransit Gateway attachmentのルートが登録されていることが分かります。
Transit Gateway あたりの静的ルートの数はデフォルトで10,000で、調整も可能なので、こちらの方法で問題ないかと考えます。
Transit Gateway あたりの静的ルート : 10,000
注意点 2. Transit VIFが必要
そもそもですが、Transit GatewayとDirect Connect Gatewayを接続するためにはTransit VIFを用意する必要があります。
Q: AWS Transit Gateway にプライベート仮想インターフェイスをアタッチできますか?
いいえ、AWS Transit Gateway にプライベート仮想インターフェイスをアタッチすることはできません。
Direct ConnectのデリバリーパートナーがTransit VIFを提供しているか確認しておきましょう。
注意点 3. 切り替え時のダウンタイム
Private VIFからTransit VIFへの切り替え作業はLocal PreferenceやAS_PATHを設定変更できない場合、切り替え時にダウンタイムが発生します。
Direct Connect GatewayとVPCの直結構成から、Direct Connect GatewayとTransit Gatewayの併用構成に変更する場合は以下記事が参考になります。
こちらの記事ではLocal Preferenceで優先パスを指定することができないシナリオを紹介しています。
Transit Gatewayこそ至高
VIFが複数ある場合にAWS側からルーティングを制御したいときはTransit Gatewayを使うことで対応できることを紹介しました。
Direct Connectのルーティングポリシーは普段なかなか意識しないので振り返ることができて良かったです。
AWS公式ブログに実際にLocal PreferenceやAS_PATHプリペンドを設定してルーティングを制御する記事がありました。併せてご覧いただくと、より理解が深まると思います。
やはり、柔軟性が神っているTransit Gatewayこそ至高ですな。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!